home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1998 January: Mac OS SDK / Dev.CD Jan 98 SDK1.toast / Development Kits (Disc 1) / QuickDraw 3D / RAVE SDK 1.5 MacOS / RaveDemo / globe.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-08-14  |  4.7 KB  |  258 lines  |  [TEXT/CWIE]

  1. #include "MyHeader.h"
  2.  
  3.  
  4. void WriteGlobe(void)
  5. {
  6.  
  7.     long lonBands = 20;
  8.     long latBands = 10;
  9.     
  10.     long x, y;
  11.  
  12.     MyShape * shape;
  13.     
  14.     MyVector * p;
  15.     MyTri * t;
  16.     
  17.     float cy, sy;
  18.     
  19.     short texture = 3;
  20.     
  21.     float u1, u2;
  22.     float v1, v2;
  23.     long p1, p2;
  24.     long q1, q2;
  25.  
  26.     /////////
  27.     
  28.     shape = MyShapeNew();
  29.     shape->pointCount = (latBands - 1) * lonBands + 2;
  30.     shape->pointList = malloc(sizeof (MyVector) * shape->pointCount);
  31.     
  32.     shape->pointList[0].x = 0;
  33.     shape->pointList[0].y = 1;
  34.     shape->pointList[0].z = 0;
  35.     
  36.     shape->pointList[1].x = 0;
  37.     shape->pointList[1].y = -1;
  38.     shape->pointList[1].z = 0;
  39.     
  40.     p = &shape->pointList[2];
  41.     
  42.     for(y = 1; y < latBands; y++){
  43.         cy = cos(pi * y / latBands);
  44.         sy = sin(pi * y / latBands);
  45.         for(x = 0; x < lonBands; x++){
  46.             p->y = cy;
  47.             p->x = sin(pi * 2 * x / lonBands) * sy;
  48.             p->z = cos(pi * 2 * x / lonBands) * sy;
  49.             p++;
  50.         }
  51.     }
  52.  
  53.     shape->triangleCount = (latBands - 1) * lonBands * 2;
  54.     shape->triangleList = malloc(sizeof (MyTri) * shape->triangleCount);
  55.     t = shape->triangleList;
  56.     for(y = 0; y < latBands; y++){
  57.         v1 = 1.0 - ((float)y) / latBands;
  58.         v2 = 1.0 - ((float)y + 1) / latBands;
  59.         for(x = 0; x < lonBands; x++){
  60.             u1 = ((float)x) / lonBands;
  61.             u2 = ((float)x + 1) / lonBands;
  62.             p2 = 2 + x + y * lonBands;
  63.             p1 = p2 - lonBands;
  64.             q2 = 2 + ((x + 1) % lonBands) + y * lonBands;
  65.             q1 = q2 - lonBands;
  66.             if(y == 0){
  67.                 t->corner[0].pointNumber = 0;
  68.                 t->corner[0].u = u1;
  69.                 t->corner[0].v = 1;
  70.                 
  71.                 t->corner[1].pointNumber = q2;
  72.                 t->corner[1].u = u2;
  73.                 t->corner[1].v = v2;
  74.  
  75.                 t->corner[2].pointNumber = p2;
  76.                 t->corner[2].u = u1;
  77.                 t->corner[2].v = v2;
  78.                 
  79.                 t->texture = texture;
  80.                 
  81.                 t++;
  82.             } else if (y == latBands - 1){
  83.                 t->corner[0].pointNumber = 1;
  84.                 t->corner[0].u = u1;
  85.                 t->corner[0].v = 0;
  86.                 
  87.                 t->corner[1].pointNumber = p1;
  88.                 t->corner[1].u = u1;
  89.                 t->corner[1].v = v1;
  90.  
  91.                 t->corner[2].pointNumber = q1;
  92.                 t->corner[2].u = u2;
  93.                 t->corner[2].v = v1;
  94.                 
  95.                 t->texture = texture;
  96.                 
  97.                 t++;
  98.             } else {
  99.                 t->corner[0].pointNumber = p2;
  100.                 t->corner[0].u = u1;
  101.                 t->corner[0].v = v2;
  102.                 
  103.                 t->corner[1].pointNumber = p1;
  104.                 t->corner[1].u = u1;
  105.                 t->corner[1].v = v1;
  106.  
  107.                 t->corner[2].pointNumber = q2;
  108.                 t->corner[2].u = u2;
  109.                 t->corner[2].v = v2;
  110.                 
  111.                 t->texture = texture;
  112.                 
  113.                 t++;
  114.  
  115.  
  116.                 t->corner[0].pointNumber = p1;
  117.                 t->corner[0].u = u1;
  118.                 t->corner[0].v = v1;
  119.                 
  120.                 t->corner[1].pointNumber = q1;
  121.                 t->corner[1].u = u2;
  122.                 t->corner[1].v = v1;
  123.  
  124.                 t->corner[2].pointNumber = q2;
  125.                 t->corner[2].u = u2;
  126.                 t->corner[2].v = v2;
  127.                 
  128.                 t->texture = texture;
  129.                 
  130.                 t++;
  131.             }
  132.         }
  133.     }
  134.     
  135.     MyShapeSave(shape, "globe");
  136.     
  137.     MyShapeDispose(shape);
  138. }
  139.  
  140.  
  141. void WriteCylinder(void)
  142. {
  143.  
  144.     long lonBands = 20;
  145.     
  146.     long x, c, pn;
  147.  
  148.     MyShape * shape;
  149.     
  150.     MyVector * p;
  151.     MyVector * pp;
  152.     MyTri * t;
  153.  
  154.     short texture = 4;
  155.     
  156.     float u1, u2;
  157.     long p1, p2;
  158.     long q1, q2;
  159.  
  160.     /////////
  161.     
  162.     shape = MyShapeNew();
  163.     shape->pointCount = lonBands * 2;
  164.     MYMALLOC(shape->pointList, shape->pointCount);
  165.     
  166.     
  167.     p = shape->pointList;
  168.     pp = p + lonBands;
  169.     
  170.     for(x = 0; x < lonBands; x++){
  171.         p->y = 1;
  172.         pp->y = -1;
  173.         pp->x = p->x = sin(pi * 2 * x / lonBands);
  174.         pp->z = p->z = cos(pi * 2 * x / lonBands);
  175.         p++;
  176.         pp++;
  177.     }
  178.  
  179.     shape->triangleCount = lonBands * 4 - 4;
  180.     MYMALLOC(shape->triangleList, shape->triangleCount);
  181.  
  182.     t = shape->triangleList;
  183.     for(x = 0; x < lonBands; x++){
  184.         u1 = 3.0 * ((float)x) / lonBands;
  185.         u2 = 3.0 * ((float)x + 1) / lonBands;
  186.         p1 = x;
  187.         p2 = p1 + lonBands;
  188.         q1 = (x + 1) % lonBands;
  189.         q2 = q1 + lonBands;
  190.  
  191.         t->corner[0].pointNumber = p2;
  192.         t->corner[0].u = u1;
  193.         t->corner[0].v = 0;
  194.         
  195.         t->corner[1].pointNumber = p1;
  196.         t->corner[1].u = u1;
  197.         t->corner[1].v = 1;
  198.  
  199.         t->corner[2].pointNumber = q2;
  200.         t->corner[2].u = u2;
  201.         t->corner[2].v = 0;
  202.         
  203.         t->texture = texture;
  204.         
  205.         t++;
  206.  
  207.  
  208.         t->corner[0].pointNumber = p1;
  209.         t->corner[0].u = u1;
  210.         t->corner[0].v = 1;
  211.         
  212.         t->corner[1].pointNumber = q1;
  213.         t->corner[1].u = u2;
  214.         t->corner[1].v = 1;
  215.  
  216.         t->corner[2].pointNumber = q2;
  217.         t->corner[2].u = u2;
  218.         t->corner[2].v = 0;
  219.         
  220.         t->texture = texture;
  221.         
  222.         t++;
  223.     }
  224.     
  225.     for(x = 2; x < lonBands; x++){
  226.         t->corner[0].pointNumber = lonBands;
  227.         t->corner[1].pointNumber = lonBands + x - 1;
  228.         t->corner[2].pointNumber = lonBands + x;
  229.         for(c = 0; c < 3; c++){
  230.             pn = t->corner[c].pointNumber;
  231.             t->corner[c].u = shape->pointList[pn].x;
  232.             t->corner[c].v = shape->pointList[pn].z;
  233.         }
  234.         
  235.         t->texture = texture;
  236.         
  237.         t++;
  238.     }    
  239.     
  240.     for(x = 2; x < lonBands; x++){
  241.         t->corner[0].pointNumber = 0;
  242.         t->corner[1].pointNumber = x;
  243.         t->corner[2].pointNumber = x - 1;
  244.         for(c = 0; c < 3; c++){
  245.             pn = t->corner[c].pointNumber;
  246.             t->corner[c].u = -shape->pointList[pn].x;
  247.             t->corner[c].v = shape->pointList[pn].z;
  248.         }
  249.         
  250.         t->texture = texture;
  251.         
  252.         t++;
  253.     }    
  254.     
  255.     MyShapeSave(shape, "cylinder");
  256.     
  257.     MyShapeDispose(shape);
  258. }